//日期工具类
import dayjs from 'dayjs'

/**
 * 校检日期格式是否为YYYY-MM-DD这种格式
 * @param date
 * @returns {boolean}
 */
export function isValidDate(date: any) : boolean  {
  return dayjs(date,"YYYY-MM-DD",true).isValid()
}

/**
 * 校检日期格式是否为YYYY-MM-DD HH:mm:ss这种格式
 * @param date
 * @returns {boolean}
 */
export function isValidDateTime(date: any) : boolean {
  return dayjs(date,"YYYY-MM-DD HH:mm:ss",true).isValid()
}

/**
 * 获取当前日期年月日,时间格式为YYYY-MM-DD
 * @returns {string}
 */
export function getCurrentDate() : string{
  return dayjs(new Date()).format("YYYY-MM-DD")
}

/**
 * 获取当前日期的下一天
 * @returns { string }
 */
export function getCurrentNextDayDate() : string{
  return dayjs(dayjs().add(1 , 'day')).format("YYYY-MM-DD")
}


/**
 * 获取当前日期年月日时分秒,时间格式为YYYY-MM-DD HH:mm:ss(24小时制,如果hh为小写表示为12小时制)
 * @returns {string}
 */
export function getCurrentDateTime() : string {
  return dayjs(new Date()).format("YYYY-MM-DD HH:mm:ss")
}

/**
 * 将传过来的日期转换为YYYY-MM-DD这种格式
 * @param date:为传过来的日期
 * @returns {string}
 */
export function getConvertDate(date: any) : string {
  return dayjs(date).format("YYYY-MM-DD")
}

/**
 * 将传过来的日期转换为YYYY-MM-DD HH:mm:ss这种格式
 * @param date:为传过来的日期
 * @returns {string}
 */
export function getConvertDateTime(date: any) : string {
  return dayjs(date).format("YYYY-MM-DD HH:mm:ss")
}

/**
 * 将传过来的日期加X日期且时间格式为YYYY-MM-DD这种格式,如:getXAfterDate('2023-11-11',1,'day'),结果为2023-11-12
 * @param date:为传过来的日期
 * @param num:在当前日期加num,类型为int
 * @param dateType:为要加的日期类型,有如下类型:'minute','hour','day','week','month','year'这六种类型
 * @returns {string}
 */
export function getXAfterDate(date: any, num: number , dateType: any) : string {
  return dayjs(date).add(num , dateType).format("YYYY-MM-DD")
}

/**
 * 将传过来的日期加X日期且时间格式为YYYY-MM-DD HH:mm:ss这种格式,如:getXAfterDateTime('2023-11-11 10:23:45',1,'day'),结果为2023-11-12 10:23:45
 * @param date:为传过来的日期
 * @param num:在当前日期加num,类型为int
 * @param dateType:为要加的日期类型,有如下类型:'minute','hour','day','week','month','year'这六种类型
 * @returns {string}
 */
export function getXAfterDateTime(date: any,num: number,dateType: any) : string {
  return dayjs(date).add(num,dateType).format("YYYY-MM-DD HH:mm:ss")
}

/**
 * 将传过来的日期减去X日期且时间格式为YYYY-MM-DD这种格式,如:getXBeforeDate('2023-11-11',1,'day'),结果为2023-11-10
 * @param date:为传过来的日期
 * @param num:在当前日期加num,类型为int
 * @param dateType:为要加的日期类型,有如下类型:'minute','hour','day','week','month','year'这六种类型
 * @returns {string}
 */
export function getXBeforeDate(date: any,num: number,dateType: any) : string {
  return dayjs(date).subtract(num,dateType).format("YYYY-MM-DD")
}

/**
 * 将传过来的日期减去X日期且时间格式为YYYY-MM-DD HH:mm:ss这种格式,如:getXBeforeDateTime('2023-11-11 10:23:45',1,'day'),结果为2023-11-10 10:23:45
 * @param date:为传过来的日期
 * @param num:在当前日期加day,类型为int
 * @param dateType:为要加的日期类型,有如下类型:'minute','hour','day','week','month','year'这六种类型
 * @returns {string}
 */
export function getXBeforeDateTime(date: any,num: number,dateType: any) : string {
  return dayjs(date).subtract(num,dateType).format("YYYY-MM-DD HH:mm:ss")
}

/**
 * 计算2个日期之间的差值
 * @param startDate:开始日期
 * @param endDate:结束日期,结束日期要比开始日期大
 * @param dateType:日期类型,有如下类型:'minute','hour','day','week','month','year'这六种类型
 * @returns {number}
 */
export function getDateDiff(startDate: any,endDate: any,dateType: any) {
  return dayjs(endDate).diff(dayjs(startDate),dateType)
}

/**
 * 判断date1是否在date2之前,比如:date1:2023-01-01 13:30:23,date2:2022-12-01 13:30:23,结果为false
 * @param date1
 * @param date2
 * @returns {boolean}
 */
export function isBefore(date1: any,date2: any) : boolean {
  return dayjs(date1).isBefore(dayjs(date2))
}

/**
 * 判断date1是否在date2之后,比如:date1:2023-01-01 13:30:23,date2:2022-12-01 13:30:23,结果为true
 * @param date1
 * @param date2
 * @returns {boolean}
 */
export function isAfter(date1: any,date2: any) : boolean {
  return dayjs(date1).isAfter(dayjs(date2))
}

/**
 * 判断date1是否与date2相同,比如:date1:2023-01-01 13:30:23,date2:2022-12-01 13:30:23,结果为false
 * @param date1
 * @param date2
 * @returns {boolean}
 */
export function isSame(date1: any,date2: any) : boolean {
  return dayjs(date1).isSame(dayjs(date2))
}


/**
 * 将传过来的日期转为当年的1月1号或者当月的1号或者当周的周一
 * @param date:传过来日期
 * @param dateType,日期类型,为:year,month,week这3种
 * @returns {string}
 */
export function getEarlyDaysDate(date: any,dateType: any) {
  return dayjs(date).startOf(dateType).format("YYYY-MM-DD")
}

/**
 * 将传过来的日期转为当年的12月31号或者当月的最后一天或者当周的周日
 * @param date:传过来日期
 * @param dateType,日期类型,为:year,month,week这3种
 * @returns {string}
 */
export function getLastDaysDate(date: any,dateType: any) {
  return dayjs(date).endOf(dateType).format("YYYY-MM-DD")
}

